﻿//#include<iostream>
//using namespace std;
//
//class test
//{
//public:
//	test()
//	{
//		cout << "test" << endl;
//	}
//};
//
//class Date
//{
//public:
//	//编译器会默认生成一个构造函数
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//private:
//	test t;
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main()
//{
//	Date d1;//自动调用
//	d1.Print();
//	return 0;
//}


//#include<iostream>
//using namespace std;
//class Date
//{
//public:
//	// 1.无参构造函数
//	Date()
//	{
//		_year = 1;
//		_month = 1;
//		_day = 1;
//	}
//	// 2.全缺省构造函数
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//	    _year = year;
//	    _month = month;
//	    _day = day;
//	}
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	
//	Date d1; // 调用默认构造函数
//	d1.Print();
//	return 0;
//}

//#include<iostream>
//using namespace std;
//
//class test
//{
//public:
//	~test()
//	{
//		cout << "~test" << endl;
//	}
//
//};
//
//class Date
//{
//public:
//	//构造函数
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//	//析构函数
//	~Date()
//	{
//		_year = _month = _day = 0;
//	}
//private:
//	test t;
//	int _year;
//	int _month;
//	int _day;
//};
//
////class Date
////{
////public:
////	//构造函数
////	Date(int year = 1, int month = 1, int day = 1)
////	{
////		_year = year;
////		_month = month;
////		_day = day;
////	}
////	void Print()
////	{
////		cout << _year << "/" << _month << "/" << _day << endl;
////	}
////	//编译器会自动生成默认的析构函数
////private:
////	int _year;
////	int _month;
////	int _day;
////};
//
//
//int main()
//{
//	Date d1;
//
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
//typedef int STDataType;
//
//class Stack
//{
//public:
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//	~Stack()
//	{
//		cout << "~Stack()" << endl;
//		free(_a);
//		_a = nullptr;
//		_top = _capacity = 0;
//	}
//
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
//
//// 两个Stack实现队列
//class MyQueue
//{
//public:
//	//编译器默认生成MyQueue的析构函数调用了Stack的析构，释放的Stack内部的资源
//	// 显示写析构，也会自动Stack的析构
///*~MyQueue()
//{
//   
//}*/
//private:
//	Stack pushst;
//	Stack popst;
//};
//
//int main()
//{
//	Stack st;
//	MyQueue mq;
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
//class test
//{
//public:
//	//构造函数
//	test(int a = 8)
//	{
//		_a = a;
//	}
//	//拷贝构造
//	test(const test& t)
//	{
//		_a = t._a;
//	}
//
//	void Print()
//	{
//		cout << _a << endl;
//	}
//
//private:
//	int _a;
//};
//
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//private:
//	test t;
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1(2024, 7, 27);
//	Date d3 = d1;//拷贝构造
//	d1.Print();
//	d3.Print();
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
//typedef int STDataType;
//
//class Stack
//{
//public:
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
	//Stack(const Stack& st)
	//{
	//	// 需要对_a指向资源创建同样大的资源再拷⻉值
	//	_a = (STDataType*)malloc(sizeof(STDataType) * st._capacity);
	//	if (nullptr == _a)
	//	{
	//		perror("malloc申请空间失败!!!");
	//		return;
	//	}
	//	memcpy(_a, st._a, sizeof(STDataType) * st._top);
	//	_top = st._top;
	//	_capacity = st._capacity;
	//}
//	void Push(STDataType x)
//	{
//		if (_top == _capacity)
//		{
//			int newcapacity = _capacity * 2;
//			STDataType* tmp = (STDataType*)realloc(_a, newcapacity *
//				sizeof(STDataType));
//			if (tmp == NULL)
//			{
//				perror("realloc fail");
//				return;
//			}
//			_a = tmp;
//			_capacity = newcapacity;
//		}
//		_a[_top++] = x;
//	}
//	~Stack()
//	{
//		cout << "~Stack()" << endl;
//		free(_a);
//		_a = nullptr;
//		_top = _capacity = 0;
//	}
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
//
//int main()
//{
//	Stack st1;
//	st1.Push(1);
//	st1.Push(2);
//	// Stack不显示实现拷⻉构造，用自动生成的拷⻉构造完成浅拷⻉
//	// 会导致st1和st2里面的_a指针指向同一块资源，析构时会析构两次，程序崩溃
//	Stack st2 = st1;
//
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
//typedef int STDataType;
//
//class Stack
//{
//public:
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//
//	Stack(const Stack& st)
//	{
//		// 需要对_a指向资源创建同样大的资源再拷⻉值
//		_a = (STDataType*)malloc(sizeof(STDataType) * st._capacity);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败!!!");
//			return;
//		}
//		memcpy(_a, st._a, sizeof(STDataType) * st._top);
//		_top = st._top;
//		_capacity = st._capacity;
//	}
//	void Push(STDataType x)
//	{
//		if (_top == _capacity)
//		{
//			int newcapacity = _capacity * 2;
//			STDataType* tmp = (STDataType*)realloc(_a, newcapacity *
//				sizeof(STDataType));
//			if (tmp == NULL)
//			{
//				perror("realloc fail");
//				return;
//			}
//			_a = tmp;
//			_capacity = newcapacity;
//		}
//		_a[_top++] = x;
//	}
//	~Stack()
//	{
//		cout << "~Stack()" << endl;
//		free(_a);
//		_a = nullptr;
//		_top = _capacity = 0;
//	}
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
//
//// 两个Stack实现队列
//class MyQueue
//{
//private:
//	Stack pushst;
//	Stack popst;
//};
//int main()
//{
//	
//	MyQueue mq1;
//	// MyQueue自动生成的拷⻉构造，会自动调用Stack拷⻉构造完成pushst/popst
//	MyQueue mq2 = mq1;
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
//
//class Date
//{
//public:
//	Date(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//	int _year;
//	int _month;
//	int _day;
//};
//
//bool operator == (const Date& d1, const Date& d2)
//{
//	return d1._year == d2._year
//		&& d1._month == d2._month
//		&& d1._day == d2._day;
//}
//int main()
//{
//	Date d1(2024, 7, 27);
//	Date d2(2024, 7, 28);
//	if (d1 == d2)//这里也可以显示调用operator==(d1,d2);
//	{
//		cout << "日期相等" << endl;
//	}
//	else
//	{
//		cout << "日期不相等" << endl;
//	}
//	return 0;
//}


//#include<iostream>
//using namespace std;
//
//
//class Date
//{
//public:
//	Date(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	bool operator == ( const Date& d)
//	{
//		return _year == d._year
//			&& _month == d._month
//			&& _day == d._day;
//	}
//
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//
//int main()
//{
//	Date d1(2024, 7, 27);
//	Date d2(2024, 7, 28);
//	if (d1 == d2)//这里也可以显示调用operator==(d1,d2);
//	{
//		cout << "日期相等" << endl;
//	}
//	else
//	{
//		cout << "日期不相等" << endl;
//	}
//	return 0;
//}

//#include<iostream>
//using namespace std;
//
//class Date
//{
//public:
//	// 构造函数
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	// 赋值运算符重载函数
//	Date& operator=(const Date& d)
//	{
//		if (this != &d)
//		{
//			_year = d._year;
//			_month = d._month;
//			_day = d._day;
//		}
//		return *this;
//	}
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day  << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main()
//{
//	Date d1(2014, 7, 27);
//	Date d2(2024, 7, 28);
//	d2 = d1;
//	d2.Print();
//
//	return 0;
//}


//int main()
//{
//	Date d1(2024, 7, 27);
//	Date d2(d1);
//	Date d3(2024, 7, 28);
//	d1 = d3;//赋值运算符重载
//
//
//	// 需要注意这里是拷⻉构造，不是赋值重载
//	// 请牢牢记住赋值重载完成两个已经存在的对象直接的拷⻉赋值
//	// 而拷⻉构造用于⼀个对象拷⻉初始化给另⼀个要创建的对象
//	Date d4 = d1;
//	return 0;
//}

//// void Print(const Date* const this) const
//void Print() const
//{
//	cout << _year << "/" << _month << "/" << _day << endl;
//}

class Date
{
public:
	//普通取地址运算符重载
	Date* operator&()
	{
		return this;
		// return nullptr;
	}

	//const取地址运算符重载
	const Date* operator&()const
	{
		return this;
		// return nullptr;
	}
private:
	int _year; 
	int _month; 
	int _day; 

};